﻿using ExcellentProjectPlus.Dominio.Seguridad.Entidades;
using ExcellentProjectPlus.Dominio.Seguridades.Entidades;
using ExcellentProjectPlus.Dominio.Seguridades.Repositorios;
using ExcellentProjectPlus.Dominio.Seguridades.Servicios.Properties;
using ExcellentProjectPlus.Infraestructura.CrossCutting.Notificaciones;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ExcellentProjectPlus.Seguridades.Servicios.Estudiantes
{
    public class ServicioDeAdministracionDeEstudiantes : IServicioDeAdministracionDeEstudiantes
    {
        #region Atributos
        IUnidadDeTrabajoSeguridades _unidadDeTrabajo;
        INotificationService _notificationService;
        #endregion

        #region Constructores
        public ServicioDeAdministracionDeEstudiantes(IUnidadDeTrabajoSeguridades unidadDeTrabajo, 
            INotificationService notificationService)
        {
            _unidadDeTrabajo = unidadDeTrabajo;
            _notificationService = notificationService;
        }
        #endregion

        public IEnumerable<Estudiante> ObtenerEstudiantes()
        {
            return _unidadDeTrabajo.RepositorioEstudiantes.Obtener();
        }
        public Estudiante ObtenerEstudiantePorId(int id)
        {
            return _unidadDeTrabajo.RepositorioEstudiantes.ObtenerPorId(id);
        }
        public void AgregarEstudiante(Estudiante estudiante)
        {
            _unidadDeTrabajo.RepositorioEstudiantes.Agregar(estudiante);
            _unidadDeTrabajo.Confirmar();
            //Notificaciones
            _notificationService.Notify(string.Empty, estudiante.Correo, Resources.NewStudentSubjectString,
                string.Format(Resources.NewStudentBodyString, estudiante.Nombre, estudiante.Apellido));
        }
        public void ModificarEstudiante(Estudiante estudiante)
        {
            _unidadDeTrabajo.RepositorioEstudiantes.Modificar(estudiante);
            _unidadDeTrabajo.Confirmar();
        }
        public void EliminarEstudiante(Estudiante estudiante)
        {
            _unidadDeTrabajo.RepositorioEstudiantes.Eliminar(estudiante);
            _unidadDeTrabajo.Confirmar();
        }


        public IEnumerable<InformacionEstudiante> ObtenerInformacionEstudiantes()
        {
            return _unidadDeTrabajo.RepositorioEstudiantes.ObtenerInformacionEstudiantes();
        }

        public Estudiante ObtenerEstudiantePorNombreUsuario(string usuario)
        {
            return _unidadDeTrabajo.RepositorioEstudiantes.Obtener(e => e.Usuario.Equals(usuario, StringComparison.OrdinalIgnoreCase)).FirstOrDefault();
        }
    }
}
